﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TISModel;
using BTO;

namespace DAL
{
    public class DALTipoTransporte
    {
        public List<BTO.TipoTransporte> list()
        {
            //Pesquisa dados
            var tipoTransportesEntities = new TISModel.TISEntities();

            //cria modelos e add na lista para retornar
            var tipoTransportes = (from c in tipoTransportesEntities.TipoTransporte
                                   select new BTO.TipoTransporte
                                   {
                                       IDTipoTransporte = c.IDTipoTransporte,
                                       descricao = c.descricao

                                   }).ToList();

            return tipoTransportes;
        }

        public BTO.TipoTransporte getByID(int id)
        {
            //Pesquisa dados e cria modelo para retornar
            var tipoTransportesEntities = new TISModel.TISEntities();
            var tipoTransporte = (from c in tipoTransportesEntities.TipoTransporte
                                  where c.IDTipoTransporte == id
                                  select new BTO.TipoTransporte
                                  {
                                      IDTipoTransporte = c.IDTipoTransporte,
                                      descricao = c.descricao

                                  }).FirstOrDefault();

            return tipoTransporte;
        }

        public BTO.TipoTransporte getByDescricao(String descricao)
        {
            //Pesquisa dados e cria modelo para retornar
            var tipoTransportesEntities = new TISModel.TISEntities();
            var tipoTransporte = (from c in tipoTransportesEntities.TipoTransporte
                                  where c.descricao == descricao
                                  select new BTO.TipoTransporte
                                  {
                                      IDTipoTransporte = c.IDTipoTransporte,
                                      descricao = c.descricao

                                  }).FirstOrDefault();

            return tipoTransporte;
        }

        public void insert(BTO.TipoTransporte toInsert)
        {
            try
            {
                //cria um entity model e guarda
                var tipoTransporteEntities = new TISModel.TISEntities();

                TISModel.TipoTransporte tipoTransporte = new TISModel.TipoTransporte();
                tipoTransporte.descricao = toInsert.descricao;

                tipoTransporteEntities.AddToTipoTransporte(tipoTransporte);
                tipoTransporteEntities.SaveChanges();

            }
            catch (Exception)
            {
                throw new System.Exception("Não foi possível inserir o tipo de transporte!");
            }
        }

        public void update(BTO.TipoTransporte toUpdate)
        {
            var tipoTranspoteEntities = new TISModel.TISEntities();
            var tipoTransporte = (from c in tipoTranspoteEntities.TipoTransporte where c.IDTipoTransporte == toUpdate.IDTipoTransporte select c).FirstOrDefault();

            if (tipoTransporte != null)
            {
                try
                {
                    tipoTransporte.descricao = toUpdate.descricao;

                    tipoTranspoteEntities.SaveChanges();
                }
                catch (Exception)
                {
                    throw new System.Exception("Não foi Possível actualizar o tipo de transporte!");
                }
            }
            else
            {
                throw new System.Exception("Tipo de transporte não encontrado!");
            }
            
        }

        public void delete(int id)
        {
            var tipoTransporteEntities = new TISModel.TISEntities();
            var tipoTransporte = (from c in tipoTransporteEntities.TipoTransporte where c.IDTipoTransporte == id select c).FirstOrDefault();

            if (tipoTransporte != null)
            {
                try
                {
                    tipoTransporteEntities.DeleteObject(tipoTransporte);
                    tipoTransporteEntities.SaveChanges();
                }
                catch (Exception)
                {
                    throw new System.Exception("Não foi Possível remover o tipo de transporte!");
                }
            }
            else
            {
                throw new System.Exception("Tipo de transporte não encontrado!");
            }

        }
    }
}
